package cn.huapu.power.energy.util;

//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* @Author jzx
* @Description //对象集合判断工具类
* @Date 9:13 2019-6-4
* @Param
* @return
**/
public final class ValidateUtil {

    /**
     * 是否是合法的请求参数
     *
     * @param param 参数
     * @return 是否合法
     */
    public static boolean paramInvalid(String... param) {

        for (String s : param) {
            if (StringUtils.isEmpty(s) || s.length() != 36 || !checkIsUuid(s)) {
                return true;
            }
        }
        return false;

    }


    /**
     * 检验是否uuid
     *
     * @param uuidStr
     * @return
     */
    public static boolean checkIsUuid(String uuidStr) {
        try {
            UUID.fromString(uuidStr).toString();
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * 验证集合是否为空
     * @param list
     * @return
     */
     public static boolean listIsNull(List list){
        if(list==null||list.size()==0){
            return  true;
        }
        return false;
     }
    /**
     * 验证集合是否为空
     * @param lists
     * @return
     */
    public static boolean listIsNull(List... lists){
        if(lists.length==0){
            return true;
        }
        for(int i=0;i<lists.length;i++){
            if(listIsNull(lists[i])){
                return true;
            }
        }
        return false;
    }

    /**
     * 验证set集合是否为空
     * @param set
     * @return
     */
    public static boolean setIsNull(Set set){
        if(set==null||set.size()==0){
            return  true;
        }
        return false;
    }
    /**
     * 验证set集合是否为空
     * @param sets
     * @return
     */
    public static boolean setIsNull(Set... sets){
        if(sets.length==0){
            return true;
        }
        for(int i=0;i<sets.length;i++){
            if(setIsNull(sets[i])){
                return true;
            }
        }
        return false;
    }
    /**
     * 验证map是否为空
     * @param map
     * @return
     */
    public static boolean mapIsNull(Map map){
        if(map==null||map.size()==0){
            return  true;
        }
        return false;
    }
    /**
     * 验证map是否为空
     * @param maps
     * @return
     */
    public static boolean mapIsNull(Map... maps){
        if(maps.length==0){
            return true;
        }
        for(int i=0;i<maps.length;i++){
            if(mapIsNull(maps[i])){
                return true;
            }
        }
        return false;
    }

    /**
     * 验证字符串是否为空 并且不能为空白字符串
     * @param str
     * @return
     */
    public static boolean strIsBlank(String str){
        if(str==null||"".equals(str)||"undfinded".equals(str)||"null".equals(str)){
            return true;
        }
        return  false;
    }
    /**
     * 验证字符串是否为空 并且不能为空白字符串
     * @param strs
     * @return
     */
    public static boolean strIsBlank(String... strs){
        if(strs.length==0){
            return true;
        }
        for(int i=0;i<strs.length;i++){
            if(strIsBlank(strs[i])){
                return true;
            }
        }
        return  false;
    }
    /** 验证字符串是否为空 并且不能为空白字符串
     * @param str
     * @return
     */
    public static boolean strIsEmpty(String str){
        if(str==null){
            return true;
        }
        return  false;
    }
    /** 验证字符串是否为空 并且不能为空白字符串
     * @param strs
     * @return
     */
    public static boolean strIsEmpty(String... strs){
        if(strs.length==0){
            return true;
        }
        for(int i=0;i<strs.length;i++){
            if(strIsEmpty(strs[i])){
                return true;
            }
        }
        return  false;
    }

    /**
     * 验证对象是否为空
     * @param obj
     */
    public static  boolean objIsNull(Object obj){
        if(obj==null){
            return true;
        }
        return  false;
    }
    /**
     * 验证对象是否为空
     * @param objs
     */
    public static  boolean objIsNull(Object... objs){
        if(objs.length==0){
            return true;
        }
        for(int i=0;i<objs.length;i++){
            if(objIsNull(objs[i])){
                return true;
            }
        }
        return  false;
    }
    /**
     * 手机号验证
     *
     * @param phone
     * @return
     */
    public static boolean isPhone(String phone) {
        if (ValidateUtil.strIsBlank(phone)) {
            return false;
        }
        String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
        if (phone.length() != 11) {
            return false;
        } else {
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(phone);
            boolean isMatch = m.matches();
            return isMatch;
        }
    }
    /**
     * 手机号验证
     *
     * @param phones
     * @return
     */
    public static boolean isPhone(String... phones) {
        if(phones.length==0){
            return true;
        }
        for(int i=0;i<phones.length;i++){
            if(isPhone(phones[i])){
                return true;
            }
        }
        return  false;
    }
    /**
     * 验证密码
     * @param pass
     * @return
     */
    public static boolean passWordComplex(String pass){
        if(strIsBlank(pass)){
            return  false;
        }
        if(pass.length()<6||pass.length()>16){
            return  false;
        }
        return true;
    }

    /**
     * 判断对象是否是数字
     * @param objs
     * @return
     */
    public static boolean isNumber(Object... objs){
        if(objs.length==0){
            return true;
        }
        for(int i=0;i<objs.length;i++){
            if(isNumber(objs[i])){
                return true;
            }
        }
        return false;
    }
    /**
     * 判断对象是否是数字
     * @param obj
     * @return
     */
    public static boolean isNumber(Object obj){
        if(objIsNull(obj)){
            return false;
        }
        if(obj instanceof Number){
            return true;
        }
        if(obj instanceof  String){
            try {
                new BigDecimal(String.valueOf(obj));
                return true;
            } catch (Exception e) {
                return false;
            }
        }
        return false;
    }
    /**
     *  验证是否是json格式字符串
     * @param str
     * @return
     */
    /*public static boolean isJson(String str){
        if(strIsBlank(str)){
            return  false;
        }
        try {
            JSONObject.parse(str);
            return true;
        } catch (Exception e) {

        }
        return  false;
    }*/
    /**
     *  验证是否是json数组格式字符串
     * @param str
     * @return
     */
    /*public static boolean isJsonArray(String str){
        if(strIsBlank(str)){
            return  false;
        }
        try {
            JSONArray.parseArray(str);
            return true;
        } catch (Exception e) {

        }
        return  false;
    }*/
    /**
     * 判断对象是否是数字
     * @param strs
     * @return
     */
    public static boolean isJson(String... strs){
        if(strs.length==0){
            return true;
        }
        for(int i=0;i<strs.length;i++){
            if(isJson(strs[i])){
                return true;
            }
        }
        return false;
    }

}
